package com.dy.分类.哈希表和字符串._14_最长公共前缀;

import com.dy.分类.哈希表和字符串._208_实现前缀树.Trie;

/*
_14_最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀，返回空字符串 ""。

示例 1:

输入: ["flower","flow","flight"]
输出: "fl"
示例 2:

输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:

所有输入只包含小写字母 a-z 。
 */
public class Solution {
    public static  String longestCommonPrefix(String[] strs) {
        //最简单的方法
        if (strs.length==0) return "";
        String prefix = strs[0];
        for(int i =0;i<strs.length;i++){

            while(!strs[i].startsWith(prefix)){
                prefix = prefix.substring(0,prefix.length()-1);
            }
        }
        return prefix;
    }
    //先找出最短的字符串，得到其长度，然后取每个字符串的第i位，进行比较，一旦出现不一样就break out
    public static  String longestCommonPrefix2(String[] strs) {
        if (strs.length==0) return "";
        if (strs.length==1) return strs[0];

        int minLen=Integer.MAX_VALUE;
        for(String str:strs){
            if(str.length()<minLen){
                minLen = str.length();
            }
        }
        if(minLen==0){
            return "";
        }
        int i =0;
        outer:for(;i<minLen;i++){
            char c = strs[0].charAt(i);
            int j =1;
            while(j<strs.length){
                if(c!=strs[j].charAt(i)){
                    break outer;
                }
                j++;
            }
        }
        return strs[0].substring(0,i);
    }
    //练习一遍
    public static  String longestCommonPrefix3(String[] strs) {
        if(strs.length==0) return "";
        String prefix = strs[0];
        for(int i=1;i<strs.length;i++){
            while(!strs[i].startsWith(prefix)){
                prefix = prefix.substring(0,prefix.length()-1);
            }
        }
        return prefix;
    }
    //字典树
    public static  String longestCommonPrefix4(String[] strs) {
        Trie trie = new Trie();

        return trie.longestCommonPrefix(strs[0],strs);

    }

    public static void main(String[] args) {
        System.out.println(longestCommonPrefix4(new String[]{"abc","abcdfe","a"}));
    }
}
